/**
 * 发布订阅模式的中间件生成器
 */
class Middleware {
  private events: { [key: string]: Function[] } = {}
  /**
   * 订阅事件
   * @param event 事件名称
   * @param listener 事件处理函数
   */
  on(event: string, listener: Function) {
    if (!this.events[event]) {
      this.events[event] = []
    }
    this.events[event].push(listener)
  }
  /**
   * 发布事件
   * @param event 事件名称
   * @param args 事件参数
   * @return 返回事件处理函数的执行结果
   */
  emit(event: string, ...args: any[]) {
    if (!this.events[event]) {
      return []
    }
    return this.events[event].map((listener) => listener(...args))
  }
}

/** 发布订阅模式的中间件 */
export const middleware = new Middleware()
